package com.zhaopin.theswordreferstooffer;

import java.util.Stack;

/**
 * @author yin.peide
 * @date 2021-06-03 13:54
 * 面试题7： 用两个栈实现队列
 *
 *
 * 做这题之前我们首先要明白一点就是，栈是先进后出的，队列是先进先出的。我们可以
 * 使用两个栈s tackPop和s tackPush，往队列中添加元素的时候直接把要添加的值压入
 * 到 s tackPush 栈 中 。 往 队 列 中 删 除 元 素 的 时 候 如 果 s tackPop 中 有 元 素 我 们 就 直 接 删
 * 除，如果没有元素，我们需要把s tackPush中的元素全部出栈放到s tackPop中，然后
 * 再删除s tackPop中的元素。这样做的目的我们就可以保证s tackPop中的元素永远都是
 * 比s tackPush中的元素更老。
 */
public class Offer7 {

    public static void main(String[] args) {

    }
}

class Solution7 {
    public Stack<Integer> stackPush;
    public Stack<Integer> stackPop;

    public Solution7() {
        stackPush = new Stack<>();
        stackPop = new Stack<>();
    }

    public void appendTail(int value) {
        stackPush.push(value);
    }

    public int deleteHead() {
        if (stackPop.isEmpty()) {
            while (!stackPush.isEmpty()) {
                stackPop.push(stackPush.pop());
            }
        }
        return stackPop.isEmpty() ? -1 : stackPop.pop();
    }

}
